package com.example.demo.testcontroller;

import com.lee.forum.common.AppResult;
import com.lee.forum.model.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lishuo
 * Date: 2024-03-07
 * Time: 18:07
 */
@Slf4j
@RestController
public class TestController1 {

    // 注入service层，因为使用的是mvc架构，service负责具体业务处理
    @Autowired
    private TestService1 testService1;
    /**
     * 用户登录
     * @param phonenumber 手机号
     * @param password 密码
     * @return
     */
    // 假设这里的的AppResult是我定义的统一返回对象
    @PostMapping("/login")
    public AppResult login(HttpServletRequest request,
                           @RequestParam("phonenumber") String phonenumber,
                           @RequestParam("password") String password) {
        // 1.参数校验（这里就简单校验不为空且长度大于0）
        if (phonenumber == null || phonenumber.length() == 0 || password == null || password.length() == 0) {
            return AppResult.failed("用户名或密码错误");
        }

        // 2.调用Service层（service主要用来执行具体的业务，当前是controller层主要做一些参数接收和校验工作）
        User user = testService1.login(phonenumber,password);
        // 3.判断user对象是否为空（此时其实可以省略，因为在service层已经校验过了，但是为了考虑健壮性可以在校验一下）
        if (user == null) {
            // 打印一下错误日志，便于
            log.warn("登录失败：user 对象为 null");
            return AppResult.failed("登录失败");
        }
        // 4.上面没报错，就说明登录成功，将User对象设置到Session中，便于之后进行登录拦截
        HttpSession session = request.getSession();
        session.setAttribute("USER_KEY",user);
        // 5.返回结果
        return AppResult.success("登录成功");
    }

}
